package org.jsola.hr.service;

import org.jsola.core.Page;
import org.jsola.core.service.IService;
import org.jsola.hr.dao.ITreatmentDisposeTemplateDAO;
import org.jsola.hr.dto.TreatmentDisposeTemplateAddDTO;
import org.jsola.hr.dto.TreatmentDisposeTemplateUpdateDTO;
import org.jsola.hr.entity.FormGroupFieldDO;
import org.jsola.hr.entity.TreatmentDisposeTemplateDO;
import org.jsola.hr.query.TreatmentDisposeTemplateQuery;
import org.jsola.hr.vo.FormGroupVO;
import org.jsola.hr.vo.TreatmentDisposeTemplateListVO;
import org.jsola.hr.vo.TreatmentDisposeTemplateVO;
import org.jsola.user.core.TokenUser;

import java.util.List;


/**
 * 待遇处理模板
 *
 * @author zhr
 */
public interface ITreatmentDisposeTemplateService extends IService<ITreatmentDisposeTemplateDAO, TreatmentDisposeTemplateDO> {

    /**
     * 新增待遇处理模板
     *
     * @param treatmentDisposeTemplateAddDTO 新增待遇处理模板DTO
     * @param tokenUser                      当前用户
     * @return 待遇处理模板详情信息
     */
    TreatmentDisposeTemplateVO save(TreatmentDisposeTemplateAddDTO treatmentDisposeTemplateAddDTO, TokenUser tokenUser);

    /**
     * 修改待遇处理模板
     *
     * @param treatmentDisposeTemplateUpdateDTO 修改待遇处理模板DTO
     * @param tokenUser                         当前用户
     * @return 更新数量
     */
    int update(TreatmentDisposeTemplateUpdateDTO treatmentDisposeTemplateUpdateDTO, TokenUser tokenUser);


    /**
     * 批量删除待遇处理模板，物理删除，更新is_valid字段，从回收站删除
     *
     * @param tokenUser                   当前用户
     * @param treatmentDisposeTemplateIds 待遇处理模板id
     * @return 删除数量
     */
    int deleteByIds(TokenUser tokenUser, String... treatmentDisposeTemplateIds);

    /**
     * 根据待遇处理模板id查找
     *
     * @param treatmentDisposeTemplateId 待遇处理模板id
     * @param siteId                     所属站点id
     * @return 待遇处理模板详情信息
     */
    TreatmentDisposeTemplateVO selectById(String treatmentDisposeTemplateId, String siteId);

    /**
     * 查询待遇处理模板
     *
     * @param treatmentDisposeTemplateQuery 查询条件
     * @param siteId                        所属站点id
     * @return 待遇处理模板列表信息
     */
    List<TreatmentDisposeTemplateListVO> select(TreatmentDisposeTemplateQuery treatmentDisposeTemplateQuery, String siteId);

    /**
     * 查询待遇处理模板记录数
     *
     * @param treatmentDisposeTemplateQuery 查询条件
     * @param siteId                        所属站点id
     * @return 待遇处理模板记录数
     */
    int selectCount(TreatmentDisposeTemplateQuery treatmentDisposeTemplateQuery, String siteId);

    /**
     * 分页查询待遇处理模板
     *
     * @param treatmentDisposeTemplateQuery 查询条件
     * @param siteId                        所属站点id
     * @return 待遇处理模板列表信息
     */
    Page<TreatmentDisposeTemplateListVO> selectPage(TreatmentDisposeTemplateQuery treatmentDisposeTemplateQuery, String siteId);


    /**
     * 根据待遇处理模板id查找
     *
     * @param treatmentDisposeTemplateId 待遇处理模板id
     * @param siteId                     所属站点id
     * @return 待遇处理模板
     */
    TreatmentDisposeTemplateDO selectDOById(String treatmentDisposeTemplateId, String siteId);

    /**
     * 查询待遇处理模板
     *
     * @param treatmentDisposeTemplateQuery 查询条件
     * @param siteId                        所属站点id
     * @return 待遇处理模板列表
     */
    List<TreatmentDisposeTemplateDO> selectDO(TreatmentDisposeTemplateQuery treatmentDisposeTemplateQuery, String siteId);

    /**
     * 查询当前登录人的租户的默认待遇处理模板
     *
     * @param tokenUser 当前登录用户
     * @return 默认待遇处理模板
     */
    List<TreatmentDisposeTemplateVO> selectSiteDefaultTemplate(TokenUser tokenUser);

    /**
     * 分页查询租户下的的自定义模板
     *
     * @param templateQuery 模板查询条件
     * @param tokenUser     当前用户
     * @return 租户下自定义模板
     */
    Page<TreatmentDisposeTemplateVO> selectCustomTemplatePage(TreatmentDisposeTemplateQuery templateQuery,
                                                              TokenUser tokenUser);

    /**
     * 查询租户下所有待遇处理模板
     *
     * @param name      模板名称
     * @param tokenUser 当前用户
     * @return 模板列表
     */
    List<TreatmentDisposeTemplateDO> selectAllTemplateBySite(String name, TokenUser tokenUser);

    /**
     * 根据模板Id查询对应待遇处理模板的详情
     *
     * @param templateId 模板Id
     * @param tokenUser  当前用户
     * @return 模板详情
     */
    TreatmentDisposeTemplateVO selectTemplateInfoById(String templateId, TokenUser tokenUser);

    /**
     * 批量保存
     *
     * @param insertList 保存实体
     */
    void bachSave(List<TreatmentDisposeTemplateDO> insertList);

    /**
     * 查询系统提供的默认模板
     *
     * @return 默认模板
     */
    List<TreatmentDisposeTemplateDO> selectSystemDefaultTemplate();

    /**
     * 根据模板Id生成Excel
     *
     * @param templateId 模板Id
     * @param tokenUser  当前用户
     * @return excel
     */
    String generateExcel(String templateId, TokenUser tokenUser);

    /**
     * 根据模板Id查询模板下的树形表单
     *
     * @param templateId 模板id
     * @param eventId    事件Id
     * @param tokenUser  当前用户
     * @return 树形表单
     */
    List<FormGroupVO> selectFormGroupByTemplateId(String templateId, String eventId, TokenUser tokenUser);

    /**
     * 查询模板下所有字段
     *
     * @param templateId 模板Id
     * @param tokenUser  当前用户
     * @return 所有字段
     */
    List<FormGroupFieldDO> selectFieldByTemplateId(String templateId, TokenUser tokenUser);

    /**
     * 查询模板下的所有流程
     *
     * @param templateId 模板Id
     * @param tokenUser  当前用户
     * @return 流程列表
     */
    List<FormGroupVO> selectProcessChildByTemplateId(String templateId, TokenUser tokenUser);

    /**
     * copy模板
     *
     * @param templateId 模板Id
     * @param tokenUser  当前用户
     */
    void copyTemplate(String templateId, TokenUser tokenUser);

}


